#define CS      PA1
#define SCLK    PA2
#define MOSI    PA3
#define MISO    PA4

#define SPI_DELAY delay_us(1)
/**
SPI是一个环形总线结构，由ss(cs)、sck、sdi、sdo构成.
其时序其实很简单，主要是在sck的控制下，两个双向移位寄存器进行数据交换，高位先发送。   
*/
/** MODE DESCRIPTION
- CPOL = 0, CPHA = 0 (MODE 0 时钟空闲为低电平，启动就马上先接收，上升沿接收，下降沿输出)
- CPOL = 0, CPHA = 1 (MODE 1 时钟空闲为低电平，启动就马上先输出，上升沿接收，下降沿输出)
- CPOL = 1, CPHA = 0 (MODE 1 时钟空闲为高电平，启动就马上先输出，上升沿输出，下降沿接收)
- CPOL = 1, CPHA = 1 (MODE 1 时钟空闲为高电平，启动就马上先接收，上升沿接收，下降沿输出)
*/
typedef enum SPIMODE
{
    MODE_1,
    MODE_2,
    MODE_3,
    MODE_4,
}SPIMODE;

typedef enum SPITYPE
{
    SPI_MASTER,
    SPI_SLAVE,
}SPITYPE;


void spi_init(void)
{
    if (SPITYPE == SPI_MASTER)
    {
        CS   = OUTPUT;
        SCLK = OUTPUT;
        MOSI = OUTPUT;
        MISO = INPUT;
    }
    else
    {
        CS   = INPUT;
        SCLK = INPUT;
        MOSI = INPUT;
        MISO = OUTPUT;  
    }
    
    // SELECT CS;
    CS = 1;
    switch (SPIMODE)
    {
    case MODE_1:
    case MODE_2:
        SCLK = 0;
        break;
    case MODE_3:
    case MODE_4:
        SCLK = 1;
        break;
       
    }
}




